【Webアプリケーション】リダイレクトとフォワードは何が違う?

您所在的位置:网站首页 jsf page forward vs page redirect 【Webアプリケーション】リダイレクトとフォワードは何が違う?

【Webアプリケーション】リダイレクトとフォワードは何が違う?

2023-03-22 02:34| 来源: 网络整理| 查看: 265

こんにちは。エンジニアの新田です!

ここでは、システムエンジニアとして働いている私が、システム開発手法や開発言語について紹介していこうと思います。

今回は、Java Servletのリダイレクトとフォワードの違いについて解説します。

Javaについて勉強している方、Webアプリケーションを構築したいと思っている方の参考になれば幸いです!

関連記事:【Java】Webアプリケーションとは? 【Java】サーブレット(Java Servlet)

リダイレクトとフォワード

Java Servlet で、処理中のページから別のページに移動させる方法として、「リダイレクト」または「フォワード」させる方法があります。

【リダイレクト】

response.sendRedirect("遷移先のページ");

【フォワード】

RequestDispatcher dispatcher = request.getRequestDispatcher("転送先のページ"); dispatcher.forward(req, resp);

どちらも指定されたページに移動することができますが、内部的な挙動は異なります。

表面上は同じように見えますが、Webアプリケーション開発ではこれらの違いをしっかりと把握しておく必要があります。

リダイレクト

リダイレクトの場合、クラアイアントが商品Aのページを要求すると、サーバが商品A2のページを要求する指示をクライアントに戻します。

これによって、クライアントは自動的に商品A2のページを要求し、結果として商品A2のページがクライアントに戻されます。(※商品Aのページと商品A2のページは、必ずしも同一サーバのページとは限りません。)

サーバからクライアントに異なるページにアクセスする要求を返すことで別のページへの遷移を実現しています。

リダイレクトの動作イメージ

フォワード

フォワードの場合、クライアントが商品Aのページを要求すると、サーバ内で商品Aのページから商品A2のページへ処理が移送され、商品A2のページが応答として戻されます。(※商品Aのページと商品A2のページは、必ず同一サーバ上のページである必要があります)

サーバ内で商品A2のページに処理を転送し、商品A2のページを結果としてクライアントへ返すことでページ遷移を実現しています。

フォワードの動作イメージ

まとめ(挙動の違い)

リダイレクトよりもフォワードの方がパフォーマンスが良い

リダイレクトがクライアントとサーバ間を2往復(ラウンドトリップ)する非効率な処理なのに対して、フォワードは通常のリクエスト同様に1回のリクエスト/レスポンスで処理が完結します。

これは、単純に2倍のトラフィックが発生するというだけのことではありません。

リダイレクトによって発生した2回目のリクエストは、キューの末尾に配置されるため、アクセス数の多いサーバにおいては、要求待ちによる遅延が発生する可能性があります。

一方、フォワードは、1つのリクエストを処理する連続したロジックとして動作するため、こうした遅延の心配はありません。

フォワードはサーバ内部の転送にのみ使用できる

パフォーマンスが良いからといって、ページの自動的な遷移を全てフォワードで行えば良いというわけではありません。

フォワードは、「サーバ内」で処理を転送するという性質上、同一サーバ内ページ(クラス)間でしか利用することができません。

外部サーバのページに移動したいという場合は、リダイレクトを使用する必要があります。

リクエスト情報を引き継げるのはフォワードのみ

リダイレクトでは、「商品A」ページ、「商品A2」ページへの要求はまったく独立した「2つの」リクエストとして扱われるため、リクエスト情報を両者で共有することはできません。

しかし、フォワードでは、「商品A」ページ、「商品A2」ページの処理は「1つの」リクエスト処理として扱われるため、リクエスト情報をすべて引き継ぐことができます。

このようにリクエストとフォワードは、表面上は同じような動きをしているように見えますが、内部的には全くといっていいほど異なる挙動となっている事が分かったと思います。

Webアプリケーションの構築においてもその違いを十分に意識して使い分けるようにしましょう。

関連記事:【Java】Webアプリケーションとは? 【Java】サーブレット(Java Servlet)

【著者】

新田

JavaメインのWebアプリケーション開発に多く携わっています。 Javaの基本的な部分の紹介や、これまで経験したシステム開発手法、新しい技術についても紹介していこうと思います。

編集した記事一覧



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3